package inicio;

import java.awt.Font;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Scanner;

import javax.swing.UIManager;

import servidor.InterfaceServicos;
import servidor.Server;
import telas.TelaInicial;

import com.jtattoo.plaf.mcwin.McWinLookAndFeel;

/**
 * 
 * @author Douglas Borges
 * 
 */

public class Principal {
  /**
   * Versão da Aplicação
   */
  public static final double version = 2.0;
  /**
   * Nome do sistema operacional
   */
  public static final String nomeOS = (String) System.getProperties().get("os.name");
  /**
   * Pasta criada para manipulação de arquivos
   */
  public static String pastaTrabalho = null;

  public static String exemplo = null;
  /**
   * Nome do servidor obtido pelo arquivo prop.ini
   */
  public final static String servidor = "ServidorGPUHelp"; // nome da maquina
  // servidor
  /**
   * IP da maquina Cliente
   */
  public final static String ipLocal = "127.0.0.1"; // endereço loopback do
  // cliente

  /**
   * Ip do Servidor RMI
   */
  public final static String ipServidor = "10.12.3.9"; // ip da maquina
  // servidor
  /**
   * Porta de acesso da aplicação RMI obitido no arquivo propi.ini
   */
  public final static String porta = "1099"; // porta para execução, o opencl
  // usa esta

  /**
   * Diretorio Bin do CUDA
   */
  public final static String diretorioPadrao = "/home/RMI/";

  /**
   * Diretorio onde serão salvos os arquivos do usuario
   */
  public static String diretorioUsuario = null;
  /**
   * Arquivo para
   */
  public static String rebind;
  /**
   * Endereço fisico da mac nome unico
   */
  public static String macEndereco;

  /**
   * Usuario local do PC
   */
  public static String usuario;

  /**
   * Interface com os metodos implementados no servidor
   */
  public InterfaceServicos servicosRemotos;

  /**
   * Servidor FTP
   */
  public final static String ftp = "ftp.engenhariaws.com.br";
  /**
   * Servidor FTP
   */
  public final static String userFTP = "henrique@engenhariaws.com.br";

  /**
   * Senha FTP
   */
  public final static String senhaFTP = "larissa2012";


  public static void main(String[] args) {

    setUIFont(new Font("Dialog", Font.BOLD, 16));
    new java.awt.Color(255, 255, 255);

    String azulClaro = "160 240 228";
    String azulPiscina = "13 183 255";
    String branco = "255 255 255";

    try {

      Properties props = new Properties();

      props.put("selectionBackgroundColor", azulClaro);

      props.put("menuSelectionBackgroundColor", azulClaro);

      props.put("controlColor", azulClaro);

      props.put("controlColorLight", azulClaro);

      props.put("controlColorDark", azulClaro);

      props.put("buttonColor", azulClaro);

      props.put("buttonColorLight", azulClaro);

      props.put("buttonColorDark", azulClaro);

      props.put("rolloverColor", azulClaro);

      props.put("rolloverColorLight", azulClaro);

      props.put("rolloverColorDark", azulClaro);

      props.put("windowTitleForegroundColor", branco);

      props.put("windowTitleBackgroundColor", azulPiscina);

      props.put("windowTitleColorLight", azulPiscina);

      props.put("windowTitleColorDark", azulPiscina);

      props.put("windowBorderColor", azulPiscina);

      props.put("frameColor", azulPiscina);

      props.put("focusColor", azulClaro);

      props.put("focusCellColor", azulClaro);

      McWinLookAndFeel.setCurrentTheme(props);

      UIManager.setLookAndFeel("com.jtattoo.plaf.mcwin.McWinLookAndFeel");

      macEndereco = pegarEnderecoMaquina();

      criaPastaLocal();

      String caminho = Server.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
      caminho = caminho.substring(1, caminho.lastIndexOf("/") + 1);
      exemplo = "/" + caminho + "exemplos/";

    }
    catch (Exception ex) {
      System.out.println("Os exemplos não foram encontrados");
    }
    new TelaInicial();

  }


  @SuppressWarnings("resource")
  public static String pegarEnderecoMaquina() {
    BufferedReader in;
    String line = null;

    try {
      Runtime r = Runtime.getRuntime();

      if (nomeOS.toLowerCase().contains("windows")) {
        Scanner s = new Scanner(r.exec("ipconfig /all").getInputStream());
        while (s.hasNext()) {
          line = s.nextLine();
          if ((line.indexOf("Endere") != -1) && (line.indexOf("IP") == -1)) {
            line = line.substring(line.indexOf(":") + 2).trim().replace("-", "");
            break;
          }
        }
      }
      else if (nomeOS.toLowerCase().contains("mac")) {
        Process p = r.exec("ifconfig");
        in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((line = in.readLine()) != null) {
          if (line.indexOf("ether") != -1) {
            line = line.replaceAll("\\D", "");
            break;
          }

        }
        in.close();

      }
      else {
        Process p = r.exec("ifconfig");
        in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((line = in.readLine()) != null) {
          if (line.indexOf("eth") != -1) {
            String temp[] = line.split(" ");
            line.split(" ");
            line = temp[temp.length - 1].replace(":", "");
            break;
          }
        }
        in.close();
      }

    }
    catch (IOException e) {
      System.out.println("Erro: " + e);
    }
    return line;
  }


  public static void criaPastaLocal() {

    pastaTrabalho = "GPUHelp-" + macEndereco;

    if (nomeOS.toLowerCase().contains("windows")) {
      usuario = System.getProperty("user.name");
      File f = new File(String.format("c:/users/%s/%s", usuario, pastaTrabalho));
      diretorioUsuario = String.format("c:/users/%s/", usuario);

      f.mkdir();
    }
    else if (nomeOS.toLowerCase().contains("mac")) {
      usuario = System.getProperty("user.name");
      File f = new File(String.format("/users/%s/%s", usuario, pastaTrabalho));
      diretorioUsuario = String.format("/users/%s/", usuario);
      f.mkdir();

    }
    else {
      usuario = System.getProperty("user.name");
      File f = new File(String.format("/home/%s/%s", usuario, pastaTrabalho));
      diretorioUsuario = String.format("/home/%s/", usuario);
      f.mkdir();
    }
  }


  public static void setUIFont(Font f) {
    Enumeration<Object> keys = UIManager.getDefaults().keys();
    while (keys.hasMoreElements()) {
      Object key = keys.nextElement();
      Object value = UIManager.get(key);
      if (value instanceof Font)
        UIManager.put(key, f);
    }
  }

}